<script>
  async function async1() {
    console.log('async1 start')//2
    await async2()
    console.log('async1 end')//6
  }
  async function async2() {
    console.log('async2')//3
  }
  console.log('script start')//1

  setTimeout(function () {
    console.log('setTimeout')//8
  }, 0)
  async1()
  new Promise(function (resolve) {
    console.log('promise1')//4
    resolve()
  }).then(function () {
    console.log('promise2')//7
  })
  console.log('script end')//5

  // !(async function () {
  //   console.log('start')
  //   const a = await 100
  //   console.log('a', a)
  //   const b = await Promise.resolve(200)
  //   console.log('b', b)
  //   const c = await Promise.reject(300)
  //   console.log('c', c)
  //   console.log('end')
  // })()
</script>
